home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MOS / EASYEXCE.I < prev    next >
Encoding:
Text File  |  1990-12-17  |  4.4 KB  |  3 lines

  1. ⓪ IMPLEMENTATION MODULE EasyExceptions;⓪ (*$Y+,R-,H+*)⓪ ⓪ (*⓪!* Laufzeitfehler-Behandlung für Megamax Modula-2⓪!* Programmiert von Thomas Tempelmann nach einem Vorschlag von K. John Gough⓪!*⓪!* 24.09.90: installiert nun auch bei residenten Modulen den Handler neu,⓪!*           falls er durch's Deinit schon wieder entfernt wurde.⓪!* 01.03.90: Aufgeräumt⓪!* 05.07.89: IllegalCall nun als eigener Fehler⓪!*)⓪ ⓪ FROM SYSTEM IMPORT ASSEMBLER, ADR;⓪ FROM HdlError IMPORT ReleaseCatcher, GetErrorMsg, SysCatchErrors;⓪ FROM ErrBase IMPORT RaiseError, ErrResp, RtnCond;⓪ FROM SysTypes IMPORT ExcDesc;⓪ FROM PrgCtrl IMPORT Accessory, CatchProcessTerm, TermCarrier;⓪ IMPORT MOSGlobals;⓪ FROM SysBuffers IMPORT HdlErrorStack;⓪ FROM SysUtil2 IMPORT JumpBuf, SetJump, LongJump;⓪ FROM SystemError IMPORT OutOfMemory;⓪ ⓪ TYPE Exception = LONGINT;⓪ ⓪%PtrContext = POINTER TO Context;⓪%Context = RECORD⓪1prev: PtrContext;⓪1buf: JumpBuf;⓪/END;⓪ ⓪ VAR ID: INTEGER;⓪$installed: BOOLEAN;⓪$jmpPtr: PtrContext;⓪$normalReturn: Exception;⓪$wsp: MOSGlobals.MemArea;⓪ ⓪ ⓪ PROCEDURE catch (errNo: INTEGER; msg: ARRAY OF CHAR; causer: ErrResp;⓪1cont: RtnCond; VAR excData: ExcDesc ): BOOLEAN;⓪"VAR tmp: PtrContext;⓪"BEGIN⓪$IF (jmpPtr # NIL) & (errNo # MOSGlobals.UserBreak) THEN⓪&LongJump (jmpPtr^.buf, errNo);⓪$END;⓪$RETURN TRUE (* Diese Fehler werden nicht durch dies Modul behandelt *)⓪"END catch;⓪ ⓪ ⓪ PROCEDURE install (): BOOLEAN;⓪"BEGIN⓪$RETURN SysCatchErrors (catch, wsp)⓪"END install;⓪ ⓪ PROCEDURE release;⓪"BEGIN⓪$installed:= FALSE;⓪$ReleaseCatcher (catch)⓪"END release;⓪ ⓪ ⓪ PROCEDURE Call (p: PROC; VAR result: Exception);⓪"VAR res: INTEGER; con: Context;⓪"BEGIN⓪$IF ~installed THEN⓪&IF ~install () THEN⓪(result:= MOSGlobals.OutOfMemory;⓪(RETURN⓪&END⓪$END;⓪$con.prev:= jmpPtr;⓪$jmpPtr:= ADR (con);⓪$res:= SetJump (jmpPtr^.buf);⓪$IF res = 0 THEN⓪&p;⓪&result:= normalReturn⓪$ELSE⓪&result:= res⓪$END;⓪$jmpPtr:= jmpPtr^.prev;⓪$IF ~installed THEN release END⓪"END Call;⓪ ⓪ ⓪ PROCEDURE Raise (reason: Exception);⓪"BEGIN⓪$RaiseError (SHORT (reason), '', callerCaused, mayContinue)⓪"END Raise;⓪ ⓪ PROCEDURE New (VAR id: Exception);⓪"BEGIN⓪$id:= ID;⓪$INC (ID);⓪$IF ID > MAX (INTEGER) THEN⓪&ID:= 2⓪$END⓪"END New;⓪ ⓪ PROCEDURE StdErrNo (id: Exception): INTEGER;⓪"BEGIN⓪$IF id = normalReturn THEN⓪&RETURN 0⓪$ELSE⓪&RETURN SHORT (id)⓪$END⓪"END StdErrNo;⓪ ⓪ PROCEDURE NormalReturn ()  : Exception;⓪"BEGIN RETURN normalReturn END NormalReturn;⓪ ⓪ PROCEDURE RealValueError ()  : Exception;⓪"BEGIN RETURN MOSGlobals.GenFPErr END RealValueError;⓪ ⓪ PROCEDURE CaseSelectError () : Exception;⓪"BEGIN RETURN MOSGlobals.CaseSelectErr END CaseSelectError;⓪ ⓪ PROCEDURE StringOverflow ()  : Exception;⓪"BEGIN RETURN MOSGlobals.StringOverflow END StringOverflow;⓪ ⓪ PROCEDURE RangeError ()    : Exception;⓪"BEGIN RETURN MOSGlobals.OutOfRange END RangeError;⓪ ⓪ PROCEDURE Overflow ()      : Exception;⓪"BEGIN RETURN MOSGlobals.Overflow END Overflow;⓪ ⓪ PROCEDURE DivByZero ()     : Exception;⓪"BEGIN RETURN MOSGlobals.DivByZero END DivByZero;⓪ ⓪ PROCEDURE StackOverflow () : Exception;⓪"BEGIN RETURN MOSGlobals.OutOfStack END StackOverflow;⓪ ⓪ PROCEDURE StorageError ()  : Exception;⓪"BEGIN RETURN MOSGlobals.OutOfMemory END StorageError;⓪ ⓪ PROCEDURE IOError ()       : Exception;⓪"BEGIN RETURN MOSGlobals.FileSystemErr END IOError;⓪ ⓪ ⓪ VAR termHdl: TermCarrier;⓪ ⓪ BEGIN⓪"jmpPtr:= NIL;⓪"ID:= 1; (* ID darf nicht Null sein! *)⓪"New (normalReturn);⓪"wsp.bottom:= ADR (HdlErrorStack);⓪"wsp.length:= SIZE (HdlErrorStack);⓪"IF NOT Accessory () THEN⓪$(* damit ganz normal bei Prozeßende der⓪%* SysCatchErrors wieder freigegeben wird: *)⓪$CatchProcessTerm (termHdl, release, wsp);⓪$IF NOT install () THEN⓪&OutOfMemory⓪$END;⓪$installed:= TRUE⓪"END;⓪ END EasyExceptions.⓪ ə
  2. (* $FFEF7B70$FFEF7B70$FFEF7B70$FFEF7B70$FFEF7B70$FFEF7B70$FFEF7B70$FFEF7B70$FFEF7B70$FFEF7B70$FFEF7B70$FFEF7B70$FFEF7B70$FFEF7B70$FFEF7B70$00000EDB$FFEF7B70$FFEF7B70$FFEF7B70$FFEF7B70$FFEF7B70$FFEF7B70$FFEF7B70$FFEF7B70$FFEF7B70$FFEF7B70$FFEF7B70$FFEF7B70$FFEF7B70$FFEF7B70$FFEF7B70$FFEF7B70$FFEF7B70$FFEF7B70$FFEF7B70$FFEF7B70$FFEF7B70$FFEF7B70$FFEF7B70$FFEF7B70$FFEF7B70$FFEF7B70Ç$00000EDBT.......T.....T.T.......T.......T.......T.......T.......T.......T.......T.......$0000033B$0000032C$00000337$000005B0$000005C3$000005E1$000006C9$0000070A$FFE67A63$00000C9D$00000EDB$00000033$000005A1$00000ED0$00000EF3$00000EE2¼Çé*)
  3.